package com.wangqingbo.myspringboot212.service.impl;

import com.wangqingbo.myspringboot212.dao.ProjectInfoMapper;
import com.wangqingbo.myspringboot212.entity.ProjectInfo;
import com.wangqingbo.myspringboot212.service.ProjectInfoService;
import com.wangqingbo.myspringboot212.utils.PageView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service("projectInfoService")
public class ProjectInfoServiceImpl implements ProjectInfoService {

    // 附件保存路径
    @Value("${file.saveFilePath}")
    private String saveFilePath;
    // 定义一个mapper接口，并且要注入
    @Autowired
    private ProjectInfoMapper projectInfoMapper;
    @Override
    public int saveProjectInfo(ProjectInfo project) {
        return 0;
    }

    @Override
    public List<ProjectInfo> getAllProjects() {
        return projectInfoMapper.getAllProjects();
    }

    @Override
    public ProjectInfo getProjectInfoById(String projectId) {
        return projectInfoMapper.getProjectInfoById(projectId);
    }

    @Override
    public int updateProjectInfo(ProjectInfo prj) {
        return 0;
    }

    @Override
    public int delProjectById(String projectId) {
        return 0;
    }

    /**
     * 根据参数查询项目信息，用于分页
     * @param projectName 项目名称
     * @param projectCode 项目编码
     * @param currentPage 当前页，用于分页
     * @param pageSize 每页显示的数据条数，用于分页
     * @return 项目列表
     */
    public Map<String,Object> getProjectInfoByParamsPage(String projectName, String projectCode, int currentPage, int pageSize)
    {
        Map<String,Object> map = new HashMap<>();
        // 判定项目名称是否为空
        if (projectName != null && !"".equals(projectName))
        {
            projectName = "%" + projectName + "%";
        }
        // 判定项目名称是否为空
        if (projectCode != null && !"".equals(projectCode))
        {
            projectCode = "%" + projectCode + "%";
        }
        // 计算offset
        int offset = (currentPage - 1) * pageSize;
        // 查询数据列表
        List<ProjectInfo> list = projectInfoMapper.getProjectInfoByParamsPage(projectName,projectCode,offset,pageSize);
        // 将列表放入map
        map.put("list",list);
        // 数据的总条数
        int totalCount = projectInfoMapper.getProjectInfoCountByParamsPage(projectName,projectCode);
        // 计算分页的信息，封装成一个工具类
        PageView pageView = new PageView(pageSize,currentPage,totalCount);
        // 将分页信息放入map
        map.put("pageView",pageView);

        return map;
    }

    /**
     * 保存项目的附件
     * @param projectId 项目id
     * @param file 附件
     * @return 数据条数
     */
    public int saveProjectFile(String projectId, MultipartFile file)
    {
        // 把附件存放到制定的目录
        // 文件的原始名称
        String originalFilename = file.getOriginalFilename();
        // 文件的后缀名
        String suffix = "";
        // 取文件名中，最后一个点后面的字符
        if (originalFilename != null && !"".equals(originalFilename))
        {
            suffix = originalFilename.substring(originalFilename.indexOf("."));
        }
        // 为了防止重名文件被覆盖，这里给文件重命名
        String saveFileName = UUID.randomUUID().toString().replaceAll("-","");
        // 创建一个文件，参数1：文件的路径，参数2：文件名
        File savedFile = new File(saveFilePath,saveFileName + suffix);
        // 判定路径是否存在，如果不存在，就创建一个
        if (!savedFile.getParentFile().exists())
        {
            // 创建文件夹
            savedFile.getParentFile().mkdir();
        }
        // 把文件放入路径中
        try {
            file.transferTo(savedFile);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return 1;
    }
}
